/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package stubs.negocio;
import interfaces.IGerenciaReserva;
import entidades.Cliente;
import entidades.Reserva;
import entidades.Voo;
import erros.ErroAtualizacao;
import erros.ErroCadastramento;
import erros.ErroRecuperacao;
import erros.ErroRemocao;
import java.util.ArrayList;

/**
 * stub simula a controladora de gerencia reserva.
 * @author daniel
 * @author lucas
 * @author thiagostuckert
 */

public class StubCntrGerenciaReserva implements IGerenciaReserva  {

    /**
     * Código de serva que causa sucesso na classe stub.
     */
    private static final String COD_RESERVA_CADASTRAR_SUCESSO2 = "54321";
    /**
     * Código de voo que causa sucesso na classe stub.
     */
    private static final String COD_VOO1_CADASTRAR_VALIDO = "abc111";
    /**
     * Código de voo que causa sucesso na classe stub.
     */
    private static final String COD_VOO2_CADASTRAR_VALIDO = "abc222";
    /**
     * Código de voo que causa sucesso na classe stub.
     */
    private static final String COD_VOO3_CADASTRAR_VALIDO = "abc333";
    /**
     * Código de voo que causa sucesso na classe stub.
     */
    private static final String COD_VOO4_CADASTRAR_VALIDO = "abc444";
    /**
     * Código de voo que causa sucesso na classe stub.
     */
    private static final String COD_VOO5_CADASTRAR_VALIDO = "abc555";

    /**
     * Código de voo que causa sucesso na classe stub.
     */
    private static final String VOO1 = "abc111";
   /**
     * Código de voo que causa sucesso na classe stub.
     */
    private static final String VOO2 = "abc222";
    /**
     * Código de voo que causa sucesso na classe stub.
     */
    private static final String VOO3 = "abc333";
    /**
     * Código de voo que causa sucesso na classe stub.
     */

    private static final String VOO4 = "abc444";
    /**
     * Código de voo que causa sucesso na classe stub.
     */
    private static final String VOO5 = "abc555";

    /**
     * Cadastra a reserva representada pelo objeto reserva no banco.
     * @param cliente cliente o qual deseja cadastrar reserva.
     * @param reserva reserva a ser cadastrada.
     * @throws ErroCadastramento erro lançado caso a ação
     * não obtenha sucesso.
     */
    @Override
    public void cadastrarReserva(final Cliente cliente, final Reserva reserva)
            throws ErroCadastramento{
        if(reserva.getNroVoosReserva() != 5 ||
                !reserva.getReservaVoo(0).getNumeroVoo().
                equals(COD_VOO1_CADASTRAR_VALIDO) ||
                !reserva.getReservaVoo(1).getNumeroVoo().
                equals(COD_VOO2_CADASTRAR_VALIDO) ||
                !reserva.getReservaVoo(2).getNumeroVoo().
                equals(COD_VOO3_CADASTRAR_VALIDO) ||
                !reserva.getReservaVoo(3).getNumeroVoo().
                equals(COD_VOO4_CADASTRAR_VALIDO) ||
                !reserva.getReservaVoo(4).getNumeroVoo().
                equals(COD_VOO5_CADASTRAR_VALIDO)){
            throw new ErroCadastramento("Erro no cadastramento da reserva.");
        }
    }
    /**
     * Recupera a reserva presentada pelo objeto reserva.
     * @param reserva reserva a ser recuperada.
     * @return reserva Reserva recuperada.
     * @throws ErroRecuperacao erro lançado caso a ação
     * não seja realizada com sucesso.
     */
    @Override
    public Reserva recuperarReserva(Reserva reserva) throws ErroRecuperacao{
        Reserva res = null;
        return(res);
    }
    /**
     * Deleta a reserva representada pelo objeto reserva.
     * @param cliente cliente o qual deseja remover reserva.
     * @param reserva reserva a ser deletada.
     * @throws ErroRemocao erro lançado caso a ação não obtenha sucesso.
     */
    @Override
    public void delReserva(Cliente cliente, Reserva reserva) throws ErroRemocao{
        if(!reserva.getReserva().equals("23456")){
            throw new ErroRemocao("Erro na remoção de reserva");
        }
    }
    /**
     * Atualiza a reserva velha pela reserva nova no banco.
     * @param reservaVelha reserva velha a ser atualizada.
     * @param reservaNova reserva nova.
     * @throws ErroAtualizacao erro lançado caso a ação não obtenha sucesso.
     */
    @Override
    public void atualizarReserva(Reserva reservaVelha,
            Reserva reservaNova)
            throws ErroAtualizacao{
        if(!reservaVelha.getReserva().equals("23456")){
            throw new ErroAtualizacao("Erro na alteração de reserva");
        }
    }

    /**
     * Recupera as reservas de um cliente através do cpf do cliente.
     * @param cliente cliente o qual queremos suas reservas.
     * @return lista lista de reservas.
     */
    @Override
    public ArrayList<Reserva> recuperarReservas(Cliente cliente){
        ArrayList<Reserva> lista = new ArrayList();
        Reserva reserva = new Reserva(COD_RESERVA_CADASTRAR_SUCESSO2);
        Voo voo = new Voo(VOO1);
        reserva.adicionaVoo(voo);
        voo = new Voo(VOO2);
        reserva.adicionaVoo(voo);
        voo = new Voo(VOO3);
        reserva.adicionaVoo(voo);
        voo = new Voo(VOO4);
        reserva.adicionaVoo(voo);
        voo = new Voo(VOO5);
        reserva.adicionaVoo(voo);
        lista.add(reserva);
        return(lista);
    }
}
